# 消息类型

ChatModels接受一个消息列表作为输入并返回一条消息。有几种不同类型的消息。所有消息都有`role`和`content`属性。`role`描述了谁在说这条消息。LangChain为不同的角色拥有不同的消息类。`content`属性描述了消息的内容。这可能是几种不同的类型：

- 一个字符串（大多数模型处理这种类型的内容）
- 一个字典列表（用于多模态输入，其中字典包含有关该输入类型和输入位置的信息）

此外，消息还有一个`additional_kwargs`属性。这是可以传递有关消息的其他信息的地方。这主要用于*特定于提供程序*而不是通用的输入参数。这方面最为人所知的例子是来自OpenAI的`function_call`。

### 用户消息

这代表用户发出的消息。通常只包含内容。

### AI消息

这代表模型发出的消息。这可能会有`additional_kwargs` - 例如，如果使用OpenAI工具调用，则可能包含`tool_calls`。

### 系统消息

这代表系统消息，告诉模型如何行为。通常只包含内容。并非每个模型都支持这个。

### 函数消息

这代表函数调用的结果。除了`role`和`content`之外，这条消息还有一个`name`参数，用来传达生成该结果的函数的名称。

### 工具消息

这代表工具调用的结果。这与FunctionMessage不同，以匹配OpenAI的`function`和`tool`消息类型。除了`role`和`content`之外，这条消息还有一个`tool_call_id`参数，用来传达调用工具生成此结果的调用的ID。